<?php
namespace application\index\controller;
use think\Request;
/**
 * 空控制器
 * @author Administrator
 */
class Error 
{
    public function index(Request $request)
    {
        $server = $request->server();
        if (isset($server['PATH_INFO'])){
        	$reqFile = $server['PATH_INFO'];
        } elseif (isset($server['REQUEST_URI'])){
        	$reqFile = substr($server['REQUEST_URI'], 1); 
        	if (strpos($server['REQUEST_URI'], '?')) $reqFile = substr($reqFile, 0, strpos($server['REQUEST_URI'], '?'));
        }
        if (isset($reqFile)){
        	$this->dealStatic($reqFile);
        } else {
        	$this->_empty();
        }
    }

    //注意 city方法 本身是 protected 方法
    protected function dealStatic($reqFile)
    {
        //是否请求是静态文件gpx
        if (strpos($reqFile, '/')===0) $reqFile = substr($reqFile, 1);
        if (preg_match('/^[\d]+\.gpx$/is', $reqFile)){
        	$mid = substr($reqFile, 0, strpos($reqFile, '.'));
        	$map = \apps\common\model\Route::get(['mid'=>intval($mid)]);
        	if (!$map){
        		Header("HTTP/1.1 404 Not Found");
        		die();
        	}
        	if (!is_file('.'.$map->gpx)){
        		$this->_empty();
        	}
        	//获取文件名并启动下载
        	$file = 'dituwa_'.date('Ymd').'.gpx';
        	$cnt  = file_get_contents('.'.$map->gpx);
			header("Content-Type:application/octet-stream");//告诉浏览器文档类型(mime类型); octet-stream指的是二进制文件类型;下载任何类型的文件都可以这么指定
			header("Content-Disposition:attachment;filename=".$file);//告诉浏览器以附件方式对待文件(即下载文件);并设置下载后的文件名
			header("Accept-ranges:bytes");//告诉浏览器文件大小的单位
			header("Accept-Length:".strlen($cnt)); //告诉浏览器文件的大小
			file_put_contents('php://output', $cnt);
			exit();
        } else {
        	$this->_empty();
        }
        
    }
    //空操作处理
    public function _empty(){
    	header('location:/');
    }
}